package com.ldk.framework.service;

import java.util.List;

import com.ldk.base.framework.service.IBaseService;
import com.ldk.framework.entity.LinkUser;
import com.ldk.framework.entity.User;

/**
* UserService接口类
* @author xiangwl
*/
public interface IUserService extends IBaseService<User> {
	/**
	 * 根据openId判断司机是否存在
	 * @param dbKey
	 * @param openId
	 * @return
	 */
	Boolean existByOpenId(String dbKey, String openId);
	/**
	 * 根据openId获取用户信息
	 * @param openId
	 * @return
	 */
	User getUserByOpenId(String dbKey, String openId);
	/**
	 * 根据手机号获取用户信息
	 * @param phoneNo
	 * @return
	 */
	User getUserByPhone(String dbKey, String phoneNo);
	
	/**
	 * 获取关联用户信息
	 * @param dbKey
	 * @param openId
	 * @return
	 */
	LinkUser getLinkUser(String dbKey, String openId);
	
	/**
	 * 充值余额
	 * @param userName 手机号
	 * @param rechargeMoney 充值金额
	 * @param rechargeType 充值类型
	 * @param rechargeFrom 充值来源
	 * @param operator 操作人
	 * @return
	 */
	Boolean recharge(String dbKey, String userName, java.lang.Double rechargeMoney, int rechargeType, int rechargeFrom, String operator) throws Exception;

	/**
	 * 余额支付
	 * @param userName
	 * @param balance
	 */
	boolean balancePay(String dbKey, String userName, double balance);
	/**
	 * 用户退款(流程：给用户充值一个负的金额)
	 * @param userName 用户
	 * @param refundMoney 退款金额（大于0的值）
	 * @param rechargeType 充值类型
	 * @param rechargeFrom 充值来源
	 * @param operator 操作人
	 * @return
	 */
	Boolean refund(String dbKey, String userName, java.lang.Double refundMoney, int rechargeType, int rechargeFrom, String operator);

	/**
	 * 修改昵称
	 * @param dbKey
	 * @param userId
	 * @param nickName
	 * @return
	 */
	Boolean updateNickName(String dbKey, long userId, String nickName);
	/**
	 * 修改签名
	 * @param dbKey
	 * @param userId
	 * @param remark
	 * @return
	 */
	Boolean updateRemark(String dbKey, long userId,String remark);
	/**
	 * 修改头像
	 * @param dbKey
	 * @param userId
	 * @param picture
	 * @return
	 */
	Boolean updatePicture(String dbKey, long userId, String picture);
	
	/**
	 * 修改用户经纬度
	 * @param dbKey
	 * @param userId
	 * @param lon
	 * @param lat
	 * @return
	 */
	Boolean updateLocation(String dbKey, long userId, double lon, double lat);
	/**
	 * 获取指定范围的用户列表
	 * @param dbKey
	 * @param query
	 * @param lon
	 * @param lat
	 * @param distance
	 * @return
	 */
	List<User> searchByDistance(String dbKey, User query, double lon, double lat, double distance);

	/**
	 * 生成8位固定ID号
	 */
	long generateUCommonId();

	/**
	 * 判断固定ID号是否存在
	 * @param uCommonId  固定ID号
	 * @return
	 */
	Boolean existUCommonId(long uCommonId);

	/**
	 * 奖励现金卷或优惠卷
	 * @param user
	 * @return
	 */
	void insertCoupon(User user);
}
